package m1;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消息消费方
 * @author 郭鲁政
 */
public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.64.140");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        Channel channel = connectionFactory.newConnection().createChannel();
        /**
         * 创建队列,如果存在不会重复创建
         * 1.队列名字
         * 2.是否是持久化序列
         * 3.是否是排他序列
         * 4.是否自动删除
         * 5.其他属性参数
         *
         */
        channel.queueDeclare("hello-test",false,false,false,null);
        DeliverCallback callback = (String consumerTag, Delivery message) -> {
            byte[] body = message.getBody();
            String s = new String(body);
            System.out.println("接收到数据:\t"+s);

        };
        CancelCallback cancelCallback = (String consumerTag) -> {


        };
        /**
         * 使用服务器生成的 consumerTag 启动非本地、非排他的消费者。
         * 仅提供对basic.deliver和basic.cancel AMQP 方法的访问（这对于大多数情况来说已经足够了）。
         * 查看带有Consumer参数的方法以访问所有应用程序回调。
         *
         * 1.队列的名字
         * 2.如果服务器应该考虑消息一旦发送就确认为真； 如果服务器应该期待明确的确认，则为 false
         * 3.DeliverCallback – 传递消息时的回调
         * 4.cancelCallback – 消费者取消时的回调
         */
        channel.basicConsume("hello-test", true,callback,cancelCallback);
    }
}
